home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / comm / irc / KuangEleven3Gm.lha / Kuang Eleven 3 / Rexx / dccdone.amirx < prev    next >
Text File  |  1998-05-22  |  6KB  |  263 lines

  1. /* $VER: dccdone.amirx 3.4 (21.5.98) Kuang Eleven 3
  2. */
  3. options results
  4. parse arg com successcode nick filename
  5. filename=strip(filename,'B',' "');ext=upper(right(filename,4));dldir=addpart(pathpart(filename),'')
  6. if successcode then ply('DCC_DONE')
  7. "GETDCC"
  8. /* Handle Incoming */
  9. if com='RECEIVE' then do
  10.     /* Check temp DCC autoget */
  11.     x=getclip('st_autoget');p=find(x,':'upper(nick))
  12.     if p~=0 then do
  13.         do i=1 to dcc.receive.0
  14.             parse value dcc.receive.i WITH mnick . . state .
  15.             if mnick=nick&state<3 then leave
  16.         end
  17.         if i>dcc.receive.0 then do
  18.             x=delword(x,p,1)
  19.             call setclip('st_autoget',x)
  20.             if find(x,':'upper(nick))==0 then cecho('Autoget','Temporary autoget from' nick 'removed')
  21.         end
  22.     end
  23.     if ~successcode then exit
  24.     file=filepart(filename)
  25.     p=find(x,upper(file))
  26.     if p~=0 then do
  27.         do forever
  28.             p=find(x,upper(file))
  29.             if p~=0 then x=delword(x,p,1)
  30.             else leave
  31.         end
  32.         call setclip('st_autoget',x)
  33.     end
  34.  
  35.     /* KDCC Get */
  36.     x=getclip('st_kdccget')
  37.     if x~='' then do
  38.         y=find(x,file)
  39.         if y~=0 then do
  40.             call setclip('st_kdccget',strip(delword(x,y,words(file)),'L',' '||'01'x))
  41.             rts()
  42.             o=1
  43.             if getclip('sc_allwayextractkdcc')~='ON' then o=rtezrequest('Extract file' filename'?'||NL||'Allways will make this requester go away.','Yes|Allways|NO WAY!','Kuang Eleven KDCC',tags)
  44.             if o=1|o=2 then do
  45.                 if o=2 then call setclip('sc_allwayextractkdcc','ON')
  46.                 cecho('KDCC','Extracting' filename 'to' pathpart(filename))
  47.                 Select
  48.                     when ext='.LHA' then address command 'lha -q e "'filename'" "'dldir'"'
  49.                     when ext='.ZIP' then address command 'UNZIP -njqq "'filename'" -d "'dldir'"'
  50.                 otherwise
  51.                     'lzx -q e "'filename'" "'dldir'"'
  52.                 end
  53.             end
  54.             if rtezrequest('Delete temporary file' filename'?','Yes|NO WAY!','Kuang Eleven KDCC',tags)=1 then do
  55.                 cecho('KDCC','Deleting pack' filename)
  56.                 delete(filename)
  57.             end
  58.             exit
  59.         end
  60.     end
  61.     /* Handle XDC files */
  62.     if ext='.XDC' then do
  63.         open(1,filename,'R')
  64.         buffer=readch(1,word(statef(filename),2))
  65.         close(1)
  66.         delete(filename)
  67.         cr='0A'x
  68.         do until buffer=''
  69.             parse var buffer ln (cr) buffer
  70.             if ln='' then iterate
  71.             cecho(nick,ln)
  72.         end
  73.         exit
  74.     end
  75.     /* Move sounds */
  76.     if getclip('sc_amsound')~=='ON'|find('.WAV .SND .VOC',ext)=0 then exit
  77.     pr='MoveSound'
  78.     "GETCTCPSOUNDDIR"
  79.     move(prsprg(result))
  80.     exit
  81. end
  82.  
  83. /* Handle outgoing */
  84.  
  85. /* KDCC Send*/
  86. x=getclip('st_kdcc')
  87. if x~='' then do
  88.     y=find(x,filename)
  89.     if y~=0 then do
  90.         cecho('KDCC','Deleting pack' filename)
  91.         delete(filename)
  92.         call setclip('st_kdcc',strip(delword(x,y,words(filename)),'L',' '||'01'x))
  93.         exit
  94.     end
  95. end
  96.  
  97. /* Handle XDC */
  98. if ext='.XDC' then do
  99.     x=getclip('st_xdcc_list_slots')
  100.     if datatype(x,'W') then
  101.     do
  102.         x=x-1
  103.         if x<1 then x=''
  104.         call setclip('st_xdcc_list_slots',x)
  105.     end
  106. end
  107.  
  108. /* CPS Record */
  109. if successcode then do
  110.     "GETMYNICK"
  111.     "USERHOST" result
  112.     myhost=substr(result,pos('@',result)+1)
  113.     do i=1 to dcc.send.0
  114.         parse value dcc.send.i WITH mnick moveflag hostname state len cps mfilename
  115.         mfilename=strip(mfilename,'B',' "')
  116.         if hostname~='localhost'&len>100000&mnick=nick&mfilename=filename&state=3 then do
  117.             x=getclip('st_maxcps')
  118.             if x='' then x=0
  119.             if cps>x then do
  120.                 cecho('MaxCPS',bld('New record') 'acheived from' bld(nick) ':'bld(cps) 'cps!')
  121.                 call setclip('st_maxcps',cps)
  122.             end
  123.             leave
  124.         end
  125.     end
  126. end
  127.  
  128. /* Queue */
  129. do 30
  130.     "ISCONNECTED"
  131.     if rc==0 then leave
  132.     call delay(3000)
  133.     cecho('XDCCQueue','Not connected...delaying')
  134. end
  135. l=getclip('st_xdccq')
  136. if l='' then exit
  137. s=getclip('sc_xdccslots')
  138. if s='' then s=6
  139. free=s-getslots()
  140. if free<1 then exit
  141. pr='XDCC';lb=l
  142.  
  143. leech=getclip('sc_xdccleech');sentnicks=''
  144. host=address()
  145. do i=0 until l=''|free<1
  146.     parse var l q l
  147.     parse var q nick'@'spec'@'com'@'files'@'addr .
  148.     port='AMIRC.'addr
  149.     if ~show('P',port) then do
  150.         cecho(pr,'Unable to send queued request to' bld(nick)'.(port not available).')
  151.         call delq
  152.         iterate
  153.     end
  154.     address value port
  155.     "USERHOST" nick
  156.     ip=result
  157.     address value host
  158.     if pos('@',ip)==0 then do
  159.         call delq
  160.         cecho(pr,'Queued request from' bld(nick) 'aborted.(User not connected).')
  161.         iterate
  162.     end
  163.     Select
  164.         when leech=''|leech='OFF' then NOP
  165.         when leech='ALL'|leech='ON' then if xdl() then iterate
  166.         when leech='FRIENDS' then if ~checklist(nick'!'ip,'x') then if xdl() then iterate
  167.         when leech='ALLFRIENDS' then if ~checklist(nick'!'ip,'') then if xdl() then iterate
  168.     otherwise
  169.     end
  170.     if files<=free then do
  171.         call delq
  172.         address value port
  173.         if getclip('sc_xdcc')=='ON' then do
  174.             'SAY /RX kuang11XDCC 1 queue' com nick spec
  175.             sentnicks=sentnicks nick
  176.             address value host
  177.             free=free-files
  178.         end
  179.         else do
  180.             notice(nick,'Unable to send queued request.XDCC has been disabled.')
  181.             address value host
  182.             cecho(pr,'Queued request from' bld(nick) 'aborted.(XDCC disabled).')
  183.         end
  184.     end
  185. end
  186. exit
  187.  
  188. /* SHARED FUNCTIONS */
  189.  
  190. cecho:;"ECHO P="d2c(27)"b«"arg(1)"»" arg(2);return 0
  191. notice:;'QueueRAW NOTICE' arg(1) ':'arg(2);return 0
  192. delq:
  193. lb=strip(delword(lb,find(lb,q),1))
  194. call setclip('st_xdccq',lb)
  195. return
  196. prsprg:PROCEDURE
  197. X=addpart(ARG(1),'')
  198. "GETPROGDIR"
  199. Y=RESULT
  200. IF UPPER(LEFT(X,8))='PROGDIR:' THEN RETURN addpart(Y,'')||SUBSTR(X,9)
  201. RETURN X
  202.  
  203. xdl:
  204. if find(sentnicks,nick)~==0 then return 1
  205. address value port
  206. "GETDCC"
  207. address value host
  208. if dcc.send.0>0 then do i2=1 to dcc.send.0
  209.     parse value dcc.send.i2 WITH mnick . . state .
  210.     if mnick=nick&(state=0|state=2) then return 1
  211. end
  212. return 0
  213.  
  214. move:
  215. if ~exists(arg(1)) then do
  216.     cecho(pr,arg(1) 'does not exist')
  217.     exit
  218. end
  219. dest=absolutepath(arg(1))
  220. filename=absolutepath(filename)
  221. file=filepart(filename)
  222. destfile=addpart(dest,file)
  223. if exists(destfile) then do
  224.     cecho(pr,file 'already found in' dest)
  225.     exit
  226. end
  227. rename(filename,destfile)
  228. if ~exists(destfile) then address command 'copy "'filename'" "'destfile'"'
  229. if exists(destfile) then do
  230.     cecho(pr,file 'moved to' destfile)
  231.     delete(filename)
  232. end
  233. else cecho(pr,'Unable to move' filename 'to' dest)
  234. exit
  235.  
  236. getslots:procedure
  237. l=showlist('W') showlist('T')
  238. x=0;p=1
  239. do until p=0
  240.     p=pos('AmIRC DCC S',l,p)
  241.     if p~==0 then do
  242.         x=x+1;p=p+21
  243.     end
  244. end
  245. y=getclip('st_xdcc_list_slots')
  246. if y~='' then x=max(x-y,0)
  247. return x
  248. ply:
  249. if getclip('sc_playsounds')~=='ON' then return 0
  250. 'PLAYSOUND _K11'arg(1)'.snd'
  251. return 0
  252.  
  253. rts:
  254. if ~show('L','rexxreqtools.library') then if ~addlib('rexxreqtools.library',0,-30,0) then do
  255.     cecho('Error','Cannot load rexxreqtools.library')
  256.     exit
  257. end
  258. "INFO screen"
  259. tags='rt_pubscrname="'result'" rt_reqpos=reqpos_pointer'
  260. NL = '0a'x
  261. return 0
  262. /**/
  263.